AWS HealthOmics プライベートワークフロー作成時のよくあるつまづきポイント解説
AWS HealthOmics のプライベートワークフロー作成時の注意点を解説します。特に間違いやすいワークフロー定義ファイルの ZIP 圧縮を厚めに説明します。
つまづきポイント
ワークフローエンジンは Nextflow を例にします。
- ZIP 圧縮時のディレクトリ構成
- 実行結果の保存先 S3 バケットへアクセス権限を持つサービスロール
ZIP 圧縮時のディレクトリ構成
プライベートワークフローを作成する際、.nf
ファイルを ZIP 圧縮してアップロードする必要があります。しかし、ディレクトリ構成を誤るとエラーが発生します。エラーの詳細は以下のブログで説明しています。
今回はエラーを回避するために、適切な圧縮コマンドのオプションを紹介します。
ディレクトリ構成
以下のようなディレクトリ構成を ZIP 圧縮します。
$ tree . ├── nextflow-hello │ └── main.nf └── parameter.template.json
圧縮方法
nextflow-hello
ディレクトリを ZIP 圧縮します。.json
ファイルを圧縮する必要はありません。ポイントは-rj
オプションの指定です。
$ zip -rj nextflow-hello.zip ./nextflow-hello/ adding: main.nf (deflated 43%)
-rj オプションの説明
-r
オプションはディレクトリを再帰的に圧縮するためのもので、-j
オプションはディレクトリ構造を無視してファイルを ZIP のルートに配置します。この組み合わせにより、nextflow-hello
ディレクトリ内のファイルを ZIP のルートに配置できます。
圧縮後の確認
.nf
ファイルが ZIP のルート直下にあれば問題ありません。
$ zipinfo -lht nextflow-hello.zip Archive: nextflow-hello.zip Zip file size: 377 bytes, number of entries: 1 -rw-r--r-- 3.0 unx 374 tx 213 defN 24-May-26 11:49 main.nf 1 file, 374 bytes uncompressed, 213 bytes compressed: 43.0%
補足
以下は Nextflow のサンプルワークフローです。パラメータで与えた文字列を返すだけの Hello World 的なサンプルです。
ワークフロー本文
main.nf
ファイルの内容です。
nextflow.enable.dsl = 2 params.message = null if (!params.message) exit 1, "required parameter 'message' missing" process Greet { publishDir '/mnt/workflow/pubdir' input: val message output: path "output", emit: output_file script: """ echo "${message}" | tee output """ } workflow { Greet(params.message) }
パラメータファイル
parameter.template.json
ファイルの内容です。
{ "message": {"description": "(string) message to use"} }
実行結果の保存先 S3 バケットへアクセス権限を持つサービスロール
既存のサービスロールを利用する前提です。新規作成の場合は考慮不要です。
ワークフローの出力結果を保存する S3 バケットのアクセス権限が、サービスロールに正しく設定されている必要があります。
プライベートワークフローの作成
出力結果の保存先の S3 バケットの指定する箇所があります。
サービスロールに指定したロールに、対象の S3 バケットへのアクセス権限がないとワークフロー実行時に失敗します。プライベートワークフローの作成自体はできてしまうため、注意が必要です。
IAM ポリシーの確認
サービスロールのポリシーに、指定した S3 バケットへのアクセス権限が含まれていることを確認します。
まとめ
AWS HealthOmics のプライベートワークフローを作成する際には、ZIP 圧縮時のディレクトリ構成と S3 バケットのアクセス権限に注意が必要です。
おわりに
基本的なポイントを忘れがちなので備忘録として書き残しました。ちなみに久々にプライベートワークフローを作成したらハマりました。